import time

import pywintypes
import win32api
import win32con
import win32gui

# 获取状态通知栏列表句柄
import win32print


# 获取状态栏句柄
def get_session_hwd(hwd):
    try:
        hwd = win32gui.GetWindow(hwd, win32con.GW_CHILD)
        hwd = win32gui.GetWindow(hwd, win32con.GW_CHILD)
        hwd = win32gui.GetWindow(hwd, win32con.GW_HWNDNEXT)
        hwd = win32gui.GetWindow(hwd, win32con.GW_CHILD)
        hwd = win32gui.GetWindow(hwd, win32con.GW_HWNDNEXT)
        hwd = win32gui.GetWindow(hwd, win32con.GW_CHILD)
        hwd = win32gui.GetWindow(hwd, win32con.GW_CHILD)
        hwd = win32gui.GetWindow(hwd, win32con.GW_CHILD)
        hwd = win32gui.GetWindow(hwd, win32con.GW_CHILD)
        hwd = win32gui.GetWindow(hwd, win32con.GW_CHILD)
        hwd = win32gui.GetWindow(hwd, win32con.GW_HWNDNEXT)
        hwd = win32gui.GetWindow(hwd, win32con.GW_HWNDNEXT)
        hwd = win32gui.GetWindow(hwd, win32con.GW_CHILD)
        hwd = win32gui.GetWindow(hwd, win32con.GW_CHILD)
        hwd = win32gui.GetWindow(hwd, win32con.GW_CHILD)
        hwd = win32gui.GetWindow(hwd, win32con.GW_HWNDNEXT)
        hwd = win32gui.GetWindow(hwd, win32con.GW_HWNDNEXT)
        print(hwd)
        return hwd
    except pywintypes.error:
        print("不是本窗口")


# 获取富文本框句柄
def get_text_hwd(hwd):
    try:
        hwd = win32gui.GetWindow(hwd, win32con.GW_CHILD)
        hwd = win32gui.GetWindow(hwd, win32con.GW_CHILD)
        hwd = win32gui.GetWindow(hwd, win32con.GW_HWNDNEXT)
        hwd = win32gui.GetWindow(hwd, win32con.GW_CHILD)
        hwd = win32gui.GetWindow(hwd, win32con.GW_HWNDNEXT)
        hwd = win32gui.GetWindow(hwd, win32con.GW_CHILD)
        hwd = win32gui.GetWindow(hwd, win32con.GW_CHILD)
        hwd = win32gui.GetWindow(hwd, win32con.GW_HWNDNEXT)
        hwd = win32gui.GetWindow(hwd, win32con.GW_CHILD)
        hwd = win32gui.GetWindow(hwd, win32con.GW_CHILD)
        hwd = win32gui.GetWindow(hwd, win32con.GW_CHILD)
        hwd = win32gui.GetWindow(hwd, win32con.GW_CHILD)
        hwd = win32gui.GetWindow(hwd, win32con.GW_CHILD)
        hwd = win32gui.GetWindow(hwd, win32con.GW_CHILD)
        hwd = win32gui.GetWindow(hwd, win32con.GW_HWNDNEXT)
        hwd = win32gui.GetWindow(hwd, win32con.GW_CHILD)
        hwd = win32gui.GetWindow(hwd, win32con.GW_HWNDNEXT)
        hwd = win32gui.GetWindow(hwd, win32con.GW_CHILD)
        hwd = win32gui.GetWindow(hwd, win32con.GW_CHILD)
        hwd = win32gui.GetWindow(hwd, win32con.GW_CHILD)
        hwd = win32gui.GetWindow(hwd, win32con.GW_HWNDNEXT)
        print(hwd)
        return hwd
    except pywintypes.error:
        print("不是本窗口")


# 模拟核对地址快捷键
def key_input():
    # Atl+Q
    win32api.keybd_event(18, 0, 0, 0)  # 按下键
    win32api.keybd_event(81, 0, 0, 0)  # 按下键
    win32api.keybd_event(81, 0, win32con.KEYEVENTF_KEYUP, 0)  # 松开按键
    win32api.keybd_event(18, 0, win32con.KEYEVENTF_KEYUP, 0)  # 松开按键
    # Enter
    win32api.keybd_event(13, 0, 0, 0)  # 按下键
    win32api.keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 0)  # 松开按键


# 模拟快捷语发送
def key_text_input(hwd, text):
    # 富文本框
    win32api.SendMessage(hwd, win32con.WM_SETTEXT, 0, text)
    # Enter
    win32api.keybd_event(13, 0, 0, 0)  # 按下键
    win32api.keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 0)  # 松开按键


# 获取对话框坐标
def get_rect(hwd):
    return win32gui.GetWindowRect(hwd)


# 获取位置颜色
def get_color(hwd, x, y):
    print(x)
    print(y)
    s = win32gui.GetDC(hwd)
    color = win32gui.GetPixel(s, x, y)
    # win32gui.SetPixel(s, x, y, win32api.RGB(255, 11, 0))
    win32gui.ReleaseDC(hwd, s)
    blue = color & 255
    green = (color >> 8) & 255
    red = (color >> 16) & 255
    return red, green, blue


# 判断坐标像素所对应的颜色
def witch_color(color):
    red = color[2]
    green = color[1]
    blue = color[0]
    print(red, green, blue)
    if red > 200:
        if green > 200:
            print('yellow')
            return 'yellow'
        print('red')  # 有时候会误判成red
        return 'yellow'
    elif green > 200:
        print('green')
        return 'green'
    elif blue > 200:
        print('blue')
        return 'blue'


# 判断状态通知栏是否当前会话
def is_curr_session(hwd, y=52):
    # 获取坐标 对角线做坐标
    rect = get_rect(hwd)
    # 选择一个区域判断是否是蓝色
    x = rect[2] - rect[0] - 28
    # y = 52
    print(rect)
    color = get_color(hwd, x, y)
    # 绿色=已购买 需要判断是否近似绿色
    # 黄色=待付款 需要判断是否近似黄色
    # 蓝色=发货状态 需要判断是否近似黄色
    return witch_color(color)


def curr_status(hwd):
    return is_curr_session(hwd, 40)


# 状态通知栏类似于栈,先进后出,消息来了在栈顶显示,esc按键默认弹出栈顶
# 于是判断栈顶的状态,选中为蓝色,未付款有锤子图标
#   - 要想核对地址和输入快捷语,前提是栈顶(新消息)必须为选中的(蓝色背景)
#   - 若使用模拟Alt+Q核对地址未产生文本(多次校验),说明用户为咨询状态,未付款,不必发后续的快捷语
#   - 若核对地址产生文本,说明用户已下单,这个时候需要判断是否有黄色的锤子图标，如果有则发送后续的快捷键
if __name__ == '__main__':
    while True:
        time.sleep(2)
        hdc = win32gui.GetForegroundWindow()
        hdcs = get_session_hwd(hdc)
        is_curr_session(hdcs)

        # dpi = win32print.GetDeviceCaps(hdc, win32con.RASTERCAPS)
        # print(dpi)
        # s = win32gui.GetDC(hdcs)
        #
        # color = win32gui.GetPixel(s,0, 0)  # (323, 356, 543, 881)
        # print(color)
        # win32gui.ReleaseDC(hdcs, s)
        # 富文本框
        # win32api.SendMessage(text_hwd, win32con.WM_SETTEXT, 0, "爱你哦")
        # key_input()
        # hwd = get_hwd()
